package com.lwei.ljpro.service;

import com.lwei.ljpro.dto.ExcelData;
import com.lwei.ljpro.entry.UserEntry;
import com.lwei.ljpro.entry.WorkingEntry;

import java.util.List;

public interface IWorkingService extends IBaseService<WorkingEntry> {

    /**
     * 保存working实体
     * @param entry 实体对象
     * @param userEntry 当前用户用于验证,无用户则保存失败
     * @return 是否成功
     */
    Boolean saveWorkingEntry(WorkingEntry entry, UserEntry userEntry);

    /**
     * 通过用户保存working实体
     * @param entry 实体对象
     * @param userEntry 用户信息，有则保存到这下面，无则创建
     * @return 是否成功
     */
    Boolean saveWorkingEntryWithUser(WorkingEntry entry, UserEntry userEntry);
    /**
     * 更新实体并返回上一个的值
     * @param entry 实体对象
     * @return 更新之前的实体对象
     */
    WorkingEntry updateWorkingEntry(WorkingEntry entry);

    /**
     * 根据id获取指定实体
     * @param id id
     * @return 实体
     */
    WorkingEntry getWorkingEntryById(Long id);

    /**
     * 根据id删除指定实体
     * @param id id
     * @return 是否成功
     */
    Boolean deleteWorkingEntryById(Long id);


    /**
     * 条件筛选 通过user
     * @param userEntry 用户对象
     * @return 列表
     */
    List<WorkingEntry> listWorkingByUser(UserEntry userEntry);

    /**
     * 条件筛选 通过user获取今天的
     * @param userEntry 用户对象
     * @return 列表
     */
    List<WorkingEntry> listWorkingByUserToday(UserEntry userEntry);

    /**
     * 条件筛选 通过user获取明天的
     * @param userEntry 用户对象
     * @return 列表
     */
    List<WorkingEntry> listWorkingByUserTomorrow(UserEntry userEntry);

    /**
     * 条件筛选  根据时间
     * @param planTimeHorizon 计划时间起止
     * @param doneTimeHorizon 完成时间起止
     * @param userId 用户id
     * @return working列表
     */
    List<WorkingEntry> listWorkingByPlanTime(String planTimeHorizon, String doneTimeHorizon, Long userId);

    /**
     * 获取working列表
     * @return
     */
    List<WorkingEntry> listWorkingAll();

    /**
     * 获取包含id数组的数据
     * @param ids id数组
     * @return
     */
    List<WorkingEntry> listWorkingByIds(List<Long> ids);

    /**
     * 将对象列表转换为导出Excel格式
     * @param workingList 对象列表
     * @return Excel列表
     */
    List<ExcelData> workingList2ExcelData(List<WorkingEntry> workingList);
}
